package solution;

import java.util.ArrayList;
import java.util.List;

/**
 * 杨辉三角
 * @author ：徐梦轲
 * @date ：2022/5/19 0019 17:46
 */

public class Solution {
    //解法1：数学解法
    public List<List<Integer>> generate(int numRows) {
        //其实底层是一个二维数组
        List<List<Integer>> list = new ArrayList<>();
        //第一行
        List<Integer> list1 = new ArrayList<>();
        //第一行只有一个1
        list1.add(1);
        //将存储第一行元素的数组置于二维数组中
        list.add(list1);
        //第二行开始的每一行
        for (int i = 1; i < numRows; i++) {
            //listCurRow为当前行
            List<Integer> listCurRow = new ArrayList<>();
            //每行第一个元素为1
            listCurRow.add(1);
            //获取存储上一行元素的数组
            List<Integer> listPreRow = list.get(i-1);
            //设置每行的中间元素
            for (int j = 1; j < i; j++) {
                //获取上一行元素数组中下标为[i][j] 和 [i][j-1] 的元素，并将它们的和添加到当前行的数组中
                listCurRow.add(listPreRow.get(j) + listPreRow.get(j-1));
            }
            //每行的最后一个元素为1
            listCurRow.add(1);
            //将存储每行元素（从第二行开始的每一行）的数组置于二维数组中
            list.add(listCurRow);
        }
        return list;
    }

    //解法2：巧妙解法
}
